//TL
#include <cstdio>
#include <cstring>
#include <queue>
#include <algorithm>
using namespace std;




bool mark[10000], h[10000], ok;
int i, j, k, n, m, a, b, t, w[10000][10000], ww, sum;
queue<int> q;
vector<int> v[10000];

void pega(int x, int tt, int hh){
	int y;
	for(int ii=0;ii<v[x].size()&&ok;++ii){
		y = v[x][ii];
		//printf("%d->%d %d %d\n", x, y, hh, (w[x][y] + tt));
		if(mark[y]&& ((w[x][y] + tt)<601) ){
			//printf(">>\n");
			if(y==n){
				ok=0;
				sum=hh+h[y];
				return;
			}
			if(h[y]){
				mark[y]=0;
				q.push(y);
				q.push(hh+1);
				//printf("++%d %d %d\n", x, y, hh+1);
				
			}
			pega(y,w[x][y] + tt, hh);
		}
	}
}

int main(){
	//freopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);
	
	scanf("%d", &n);
	while(n){
		
		//start
		memset(mark,1,sizeof(mark));
		memset(h,0,sizeof(h));
		while(!q.empty())q.pop();
		for(i=0;i<n;++i)v[i].clear();
		
		//read
		scanf("%d", &k);
		for(i=0;i<k;++i){
			scanf("%d", &a);
			--a;
			h[a]=1;
		}
		scanf("%d", &m);
		for(i=0;i<m;++i){
			scanf("%d%d%d", &a, &b, &t);
			--a;--b;
			v[a].push_back(b);
			v[b].push_back(a);
			w[a][b]=w[b][a]=t;
		}
		
		
		//test
		// for(i=0;i<n;++i)printf("%d ", h[i]);
			// printf("\n");
		// for(i=0;i<n;++i){
			// printf("%d -> ", i);
			// for(j=0;j<v[i].size();++j){
				// printf("%d ", v[i][j]);
			// }
			// printf("\n");
		// }
		
		//run
		
		q.push(0);
		q.push(h[0]);
		mark[0]=0;
		//printf("++%d %d %d\n", 0, 0, h[0]);
		
		ok=1;sum=h[0];--n;
		while(!q.empty()&&ok){
			a=q.front();q.pop();
			ww=q.front();q.pop();
			
			//printf("--%d %d\n", a,ww);
			pega(a, 0, ww);
		}
		if(ok){
			printf("-1\n");
		}
		else printf("%d\n", sum);

		
		
		//end
		scanf("%d", &n);
	}
	
	return 0;
}
